const Service = require('egg').Service;
const stringify = require('qs').stringify;
const md5 = require('md5');
class HttpService extends Service {
  Jinr(data, headers, sign) {
    const method = data.method
    const ctx = this.ctx
    const baseUrl = ctx.app.config.appDomain
    sign = sign || ''
    data = data || {}
    let reqLog = ''
    data['v'] = '1.0.0' //接口版本 100 101 // 3-15更新成103
    data['appid'] = 'jinr_activity' //应用标识  jinr_test jinr_embed
    data['timestamp'] = Math.round(new Date().getTime() / 1000) //发起请求时的时间戳
    data['request_no'] = Math.round(new Date().getTime()) + 'jinr_activity' //请求方必须保证此号唯一。用于两边核对日志用。

    // 此参数对应上术示例中未格式化的 JSON 数据。必须进行 URL ENCODE 转换。
    data = JSON.stringify(data)
    let sig = data + "0c83b7cb6fff1fc1782f0e5ed7ff3bb7"
    const singMd5 = md5(sig).toLocaleUpperCase()
    data = {
      data: data,
      sign: singMd5
    }
    //
    return new Promise((resolve, reject) => {

      ctx.curl(baseUrl, {
        // 必须指定 method
        method: 'POST',
        // 通过 contentType 告诉 HttpClient 以 JSON 格式发送
        headers: {
          'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
        },
        // contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
        data: stringify(data),
        // 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
        dataType: 'json'
      }).then(res => {
        // ctx.body = res.data;
        ctx.body = {
          status: res.status,
          headers: res.headers,
          package: res.data,
        };
        resolve(res.data)
      }).catch(error => {
        reject(error)
      })
      // ctx.body = result.data;

    })
  }
}

module.exports = HttpService